ref(nav): use topbar slot for headeractions#112449
Merged
Conversation
Plan for migrating action buttons from Layout.HeaderActions (and styled equivalents) into TopBar.Slot name="actions" when the page frame feature flag is active. Covers 28 tasks across three patterns (actions-only, actions+FeedbackButton, actions+FeedbackButton with custom options) plus two component-level migrations (WorkflowEngineListLayout, DomainViewHeader) that cover ~10 additional callers automatically. Co-Authored-By: Claude <[email protected]>
When the page frame feature flag is active, move action buttons out of Layout.HeaderActions (and styled equivalents) and into the TopBar via the actions and feedback slots. This gives the TopBar ownership of button placement in the new page frame layout. Covers 28 sites across alerts, dashboards, discover, explore, insights, performance, profiling, preprod, releases, replays, and issue views. Component-level migrations in WorkflowEngineListLayout and DomainViewHeader cover their downstream callers automatically. Co-Authored-By: Claude <[email protected]>
Buttons inside TopBar.Slot name="actions" are wrapped by SizeProvider in the TopBar, so explicit size props are redundant. Remove them from the slot branch across all 15 affected files; the else branches (inside Layout.HeaderActions) retain their size props unchanged. Co-Authored-By: Claude <[email protected]>
The IssueViewsHeader uses a custom Flex justify="between" layout that co-locates actions (realtime toggle, star, edit menu) with the title in HeaderContent rather than in Layout.HeaderActions. When the page frame feature is active, split the two concerns: title stays in HeaderContent, actions move to TopBar.Slot name="actions". Co-Authored-By: Claude <[email protected]>
…pageframe branch Buttons in the TopBar slot already receive size via SizeProvider context. The else branch should match the same prop-less style for consistency.
…ranch The button relies on SizeProvider context from TopBar, but portal-based slots don't propagate context from the outlet's vdom position. Add explicit size prop to match IssueViewStarButton and IssueViewEditMenu until DE-1079 is resolved. Co-Authored-By: Claude Sonnet 4 <[email protected]>
Plan has been executed and is no longer needed. Co-Authored-By: Claude Sonnet 4 <[email protected]>
The no-default-exports eslint rule flagged the default export introduced in this file. Convert to a named export and update the import site. Co-Authored-By: Claude Sonnet 4 <[email protected]>
…branch Co-authored-by: Jonas <[email protected]>
Co-authored-by: Jonas <[email protected]>
Resolve conflicts by keeping feedback button in TopBar.Slot name="feedback" and actions in TopBar.Slot name="actions". Adopt helper consts introduced in master (userFeedbackFeedbackOptions, logsFeedbackOptions, issueViewsFeedbackOptions, buildDetailsFeedbackOptions) to reduce inline duplication. Also remove duplicate hasPageFrameFeature declarations introduced during the merge in feedbackListPage, issueViewsList, and buildDetailsHeaderContent. Co-Authored-By: Claude Sonnet 4 <[email protected]>
createPortal does not propagate React context, so buttons inside TopBar.Slot name="actions" do not inherit the SizeProvider size="sm" wrapping the slot outlet. Add explicit size="sm" to all Button, LinkButton, CreateAlertButton, StatusToggleButton, and NewMonitorButton instances placed inside actions slots across affected views. Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Two files had the hook called twice due to merge conflicts, causing TS2451 redeclaration errors in the @typescript/native-preview CI check. Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
natemoo-re
approved these changes
Apr 9, 2026
Member
natemoo-re
left a comment
There was a problem hiding this comment.
Looks good overall! We'll definitely need another consistency pass but this sets the foundation!
Contributor
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
There are 2 total unresolved issues (including 1 from previous review).
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 8eb4b4a. Configure here.
Adds `providers` option to `slots()` API so we can render providers that are applied locally before calling `createPortal`. As demonstrated in 1206923, this allows us to do things like remove explicit `size` props that should be derived from context where the slots are defined.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Migrates action buttons from
Layout.HeaderActions(and inline styled equivalents) into theTopBar.Slot name="actions"slot across 28 views, so they render in the unified TopBar when the page frame feature flag is active.Changes
Layout.HeaderActions/Layout.HeaderContentaction patterns with<TopBar.Slot name="actions">across 28 viewssizeprops from buttons inside the slot (they were previously needed to override defaults; now consistent withsmcontext)IssueViewsHeaderwhich was missingsize="sm"in the pageframe branch — explicit prop required until DE-1079 (Slot API context propagation) is resolvedFixes DE-1068